// Copyright (c) 2010 Ron Hess
//
// Permission is hereby granted, free of charge, to any person obtaining a 
// copy of this software and associated documentation files (the "Software"), 
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense, 
// and/or sell copies of the Software, and to permit persons to whom the 
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included 
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
// THE SOFTWARE.
//

#import "zkRelatedList.h"
#import "zkDescribeLayout.h"
#import "zkRelatedListColumn.h"
#import "zkDescribeLayoutSection.h"
#import "zkDescribeLayoutButtonSection.h"
#import "zkParser.h"


@implementation ZKDescribeLayout
-(void)dealloc {
	[detailLayoutSections release];
	[editLayoutSections release];
	[relatedLists release];
	[super dealloc];
}

-(NSString *) Id {
	return [self string:@"id"];
}

// this is a single section, not a list, it holds a list of buttons
- (ZKDescribeLayoutButtonSection *) buttonLayoutSection {
	return [[ZKDescribeLayoutButtonSection alloc] 
		initWithXmlElement:[node childElement:@"buttonLayoutSection"]];
}

- (NSArray *) detailLayoutSections {
	if (detailLayoutSections == nil) {
		NSArray *rti = [node childElements:@"detailLayoutSections"];
		NSMutableArray *res = [NSMutableArray arrayWithCapacity:[rti count]];
		for (zkElement *rnode in rti) {
			ZKDescribeLayoutSection *r = [[ZKDescribeLayoutSection alloc] initWithXmlElement:rnode];
			[res addObject:r];
			[r release];
		}
		detailLayoutSections = [res retain];
	} 
	return detailLayoutSections;	
}

- (NSArray *) editLayoutSections {
	if (editLayoutSections == nil) {
		NSArray *rti = [node childElements:@"editLayoutSections"];
		NSMutableArray *res = [NSMutableArray arrayWithCapacity:[rti count]];
		for (zkElement *rnode in rti) {
			ZKDescribeLayoutSection *r = [[ZKDescribeLayoutSection alloc] initWithXmlElement:rnode];
			[res addObject:r];
			[r release];
		}
		editLayoutSections = [res retain];
	} 
	return editLayoutSections;	
}
- (NSArray *) relatedLists {
	if (relatedLists == nil) {
		NSArray *rti = [node childElements:@"relatedLists"];
		NSMutableArray *res = [NSMutableArray arrayWithCapacity:[rti count]];
		for (zkElement *rnode in rti) {
			ZKRelatedList *r = [[ZKRelatedList alloc] initWithXmlElement:rnode];
			[res addObject:r];
			[r release];
		}
		relatedLists = [res retain];
	} 
	return relatedLists;	
}

@end